{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "49a1ddf2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: keras in c:\\users\\yzx\\anaconda3\\lib\\site-packages (2.11.0)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "pip install keras"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "39a4b7e5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: sklearn in c:\\users\\yzx\\anaconda3\\lib\\site-packages (0.0.post1)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "pip install sklearn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "de1945e3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: tensorflow in c:\\users\\yzx\\anaconda3\\lib\\site-packages (2.11.0)\n",
      "Requirement already satisfied: tensorflow-intel==2.11.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow) (2.11.0)\n",
      "Requirement already satisfied: astunparse>=1.6.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (1.6.3)\n",
      "Requirement already satisfied: six>=1.12.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (1.16.0)\n",
      "Requirement already satisfied: opt-einsum>=2.3.2 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (3.3.0)\n",
      "Requirement already satisfied: packaging in c:\\users\\yzx\\appdata\\roaming\\python\\python39\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (21.3)\n",
      "Requirement already satisfied: tensorflow-estimator<2.12,>=2.11.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (2.11.0)\n",
      "Requirement already satisfied: termcolor>=1.1.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (2.2.0)\n",
      "Requirement already satisfied: protobuf<3.20,>=3.9.2 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (3.19.6)\n",
      "Requirement already satisfied: setuptools in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (63.4.1)\n",
      "Requirement already satisfied: keras<2.12,>=2.11.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (2.11.0)\n",
      "Requirement already satisfied: google-pasta>=0.1.1 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (0.2.0)\n",
      "Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (1.51.3)\n",
      "Requirement already satisfied: typing-extensions>=3.6.6 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (4.3.0)\n",
      "Requirement already satisfied: libclang>=13.0.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (15.0.6.1)\n",
      "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (0.30.0)\n",
      "Requirement already satisfied: numpy>=1.20 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (1.21.5)\n",
      "Requirement already satisfied: wrapt>=1.11.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (1.14.1)\n",
      "Requirement already satisfied: h5py>=2.9.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (3.7.0)\n",
      "Requirement already satisfied: absl-py>=1.0.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (1.4.0)\n",
      "Requirement already satisfied: flatbuffers>=2.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (23.1.21)\n",
      "Requirement already satisfied: gast<=0.4.0,>=0.2.1 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (0.4.0)\n",
      "Requirement already satisfied: tensorboard<2.12,>=2.11 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorflow-intel==2.11.0->tensorflow) (2.11.2)\n",
      "Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.11.0->tensorflow) (0.37.1)\n",
      "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (0.4.6)\n",
      "Requirement already satisfied: markdown>=2.6.8 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (3.3.4)\n",
      "Requirement already satisfied: werkzeug>=1.0.1 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (2.0.3)\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (2.28.1)\n",
      "Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (1.8.1)\n",
      "Requirement already satisfied: google-auth<3,>=1.6.3 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (2.16.1)\n",
      "Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (0.6.1)\n",
      "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from packaging->tensorflow-intel==2.11.0->tensorflow) (3.0.9)\n",
      "Requirement already satisfied: cachetools<6.0,>=2.0.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (5.3.0)\n",
      "Requirement already satisfied: rsa<5,>=3.1.4 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (4.9)\n",
      "Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (0.2.8)\n",
      "Requirement already satisfied: requests-oauthlib>=0.7.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (1.3.1)\n",
      "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (3.3)\n",
      "Requirement already satisfied: charset-normalizer<3,>=2 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (2.0.4)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (2022.9.14)\n",
      "Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (1.26.11)\n",
      "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (0.4.8)\n",
      "Requirement already satisfied: oauthlib>=3.0.0 in c:\\users\\yzx\\anaconda3\\lib\\site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.12,>=2.11->tensorflow-intel==2.11.0->tensorflow) (3.2.2)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "pip install tensorflow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0bad6a46",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[*********************100%***********************]  1 of 1 completed\n"
     ]
    }
   ],
   "source": [
    "import pandas_datareader.data as web\n",
    "import datetime\n",
    "import yfinance as yf\n",
    "start = '2018-01-01'\n",
    "end = '2023-01-01'\n",
    "aapl = yf.download([\"AAPL\"],start, end)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "90796ba8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "      <th>Volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-01-02</th>\n",
       "      <td>42.540001</td>\n",
       "      <td>43.075001</td>\n",
       "      <td>42.314999</td>\n",
       "      <td>43.064999</td>\n",
       "      <td>40.888069</td>\n",
       "      <td>102223600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-03</th>\n",
       "      <td>43.132500</td>\n",
       "      <td>43.637501</td>\n",
       "      <td>42.990002</td>\n",
       "      <td>43.057499</td>\n",
       "      <td>40.880951</td>\n",
       "      <td>118071600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-04</th>\n",
       "      <td>43.134998</td>\n",
       "      <td>43.367500</td>\n",
       "      <td>43.020000</td>\n",
       "      <td>43.257500</td>\n",
       "      <td>41.070835</td>\n",
       "      <td>89738400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-05</th>\n",
       "      <td>43.360001</td>\n",
       "      <td>43.842499</td>\n",
       "      <td>43.262501</td>\n",
       "      <td>43.750000</td>\n",
       "      <td>41.538445</td>\n",
       "      <td>94640000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-08</th>\n",
       "      <td>43.587502</td>\n",
       "      <td>43.902500</td>\n",
       "      <td>43.482498</td>\n",
       "      <td>43.587502</td>\n",
       "      <td>41.384159</td>\n",
       "      <td>82271200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2022-12-23</th>\n",
       "      <td>130.919998</td>\n",
       "      <td>132.419998</td>\n",
       "      <td>129.639999</td>\n",
       "      <td>131.860001</td>\n",
       "      <td>131.658981</td>\n",
       "      <td>63814900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2022-12-27</th>\n",
       "      <td>131.380005</td>\n",
       "      <td>131.410004</td>\n",
       "      <td>128.720001</td>\n",
       "      <td>130.029999</td>\n",
       "      <td>129.831772</td>\n",
       "      <td>69007800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2022-12-28</th>\n",
       "      <td>129.669998</td>\n",
       "      <td>131.029999</td>\n",
       "      <td>125.870003</td>\n",
       "      <td>126.040001</td>\n",
       "      <td>125.847855</td>\n",
       "      <td>85438400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2022-12-29</th>\n",
       "      <td>127.989998</td>\n",
       "      <td>130.479996</td>\n",
       "      <td>127.730003</td>\n",
       "      <td>129.610001</td>\n",
       "      <td>129.412415</td>\n",
       "      <td>75703700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2022-12-30</th>\n",
       "      <td>128.410004</td>\n",
       "      <td>129.949997</td>\n",
       "      <td>127.430000</td>\n",
       "      <td>129.929993</td>\n",
       "      <td>129.731918</td>\n",
       "      <td>76960600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1259 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close  \\\n",
       "Date                                                                     \n",
       "2018-01-02   42.540001   43.075001   42.314999   43.064999   40.888069   \n",
       "2018-01-03   43.132500   43.637501   42.990002   43.057499   40.880951   \n",
       "2018-01-04   43.134998   43.367500   43.020000   43.257500   41.070835   \n",
       "2018-01-05   43.360001   43.842499   43.262501   43.750000   41.538445   \n",
       "2018-01-08   43.587502   43.902500   43.482498   43.587502   41.384159   \n",
       "...                ...         ...         ...         ...         ...   \n",
       "2022-12-23  130.919998  132.419998  129.639999  131.860001  131.658981   \n",
       "2022-12-27  131.380005  131.410004  128.720001  130.029999  129.831772   \n",
       "2022-12-28  129.669998  131.029999  125.870003  126.040001  125.847855   \n",
       "2022-12-29  127.989998  130.479996  127.730003  129.610001  129.412415   \n",
       "2022-12-30  128.410004  129.949997  127.430000  129.929993  129.731918   \n",
       "\n",
       "               Volume  \n",
       "Date                   \n",
       "2018-01-02  102223600  \n",
       "2018-01-03  118071600  \n",
       "2018-01-04   89738400  \n",
       "2018-01-05   94640000  \n",
       "2018-01-08   82271200  \n",
       "...               ...  \n",
       "2022-12-23   63814900  \n",
       "2022-12-27   69007800  \n",
       "2022-12-28   85438400  \n",
       "2022-12-29   75703700  \n",
       "2022-12-30   76960600  \n",
       "\n",
       "[1259 rows x 6 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "aapl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a2b1f10a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Dropout,LSTM,SimpleRNN,GRU\n",
    " \n",
    "df_train = aapl[:1000]\n",
    "df_test =  aapl[1000:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3f0ee960",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "      <th>Volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-01-02</th>\n",
       "      <td>42.540001</td>\n",
       "      <td>43.075001</td>\n",
       "      <td>42.314999</td>\n",
       "      <td>43.064999</td>\n",
       "      <td>40.888069</td>\n",
       "      <td>102223600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-03</th>\n",
       "      <td>43.132500</td>\n",
       "      <td>43.637501</td>\n",
       "      <td>42.990002</td>\n",
       "      <td>43.057499</td>\n",
       "      <td>40.880951</td>\n",
       "      <td>118071600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-04</th>\n",
       "      <td>43.134998</td>\n",
       "      <td>43.367500</td>\n",
       "      <td>43.020000</td>\n",
       "      <td>43.257500</td>\n",
       "      <td>41.070835</td>\n",
       "      <td>89738400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-05</th>\n",
       "      <td>43.360001</td>\n",
       "      <td>43.842499</td>\n",
       "      <td>43.262501</td>\n",
       "      <td>43.750000</td>\n",
       "      <td>41.538445</td>\n",
       "      <td>94640000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-01-08</th>\n",
       "      <td>43.587502</td>\n",
       "      <td>43.902500</td>\n",
       "      <td>43.482498</td>\n",
       "      <td>43.587502</td>\n",
       "      <td>41.384159</td>\n",
       "      <td>82271200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-12-14</th>\n",
       "      <td>175.250000</td>\n",
       "      <td>177.740005</td>\n",
       "      <td>172.210007</td>\n",
       "      <td>174.330002</td>\n",
       "      <td>173.059830</td>\n",
       "      <td>139380400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-12-15</th>\n",
       "      <td>175.110001</td>\n",
       "      <td>179.500000</td>\n",
       "      <td>172.309998</td>\n",
       "      <td>179.300003</td>\n",
       "      <td>177.993622</td>\n",
       "      <td>131063300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-12-16</th>\n",
       "      <td>179.279999</td>\n",
       "      <td>181.139999</td>\n",
       "      <td>170.750000</td>\n",
       "      <td>172.259995</td>\n",
       "      <td>171.004898</td>\n",
       "      <td>150185800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-12-17</th>\n",
       "      <td>169.929993</td>\n",
       "      <td>173.470001</td>\n",
       "      <td>169.690002</td>\n",
       "      <td>171.139999</td>\n",
       "      <td>169.893066</td>\n",
       "      <td>195432700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-12-20</th>\n",
       "      <td>168.279999</td>\n",
       "      <td>170.580002</td>\n",
       "      <td>167.460007</td>\n",
       "      <td>169.750000</td>\n",
       "      <td>168.513199</td>\n",
       "      <td>107499100</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close  \\\n",
       "Date                                                                     \n",
       "2018-01-02   42.540001   43.075001   42.314999   43.064999   40.888069   \n",
       "2018-01-03   43.132500   43.637501   42.990002   43.057499   40.880951   \n",
       "2018-01-04   43.134998   43.367500   43.020000   43.257500   41.070835   \n",
       "2018-01-05   43.360001   43.842499   43.262501   43.750000   41.538445   \n",
       "2018-01-08   43.587502   43.902500   43.482498   43.587502   41.384159   \n",
       "...                ...         ...         ...         ...         ...   \n",
       "2021-12-14  175.250000  177.740005  172.210007  174.330002  173.059830   \n",
       "2021-12-15  175.110001  179.500000  172.309998  179.300003  177.993622   \n",
       "2021-12-16  179.279999  181.139999  170.750000  172.259995  171.004898   \n",
       "2021-12-17  169.929993  173.470001  169.690002  171.139999  169.893066   \n",
       "2021-12-20  168.279999  170.580002  167.460007  169.750000  168.513199   \n",
       "\n",
       "               Volume  \n",
       "Date                   \n",
       "2018-01-02  102223600  \n",
       "2018-01-03  118071600  \n",
       "2018-01-04   89738400  \n",
       "2018-01-05   94640000  \n",
       "2018-01-08   82271200  \n",
       "...               ...  \n",
       "2021-12-14  139380400  \n",
       "2021-12-15  131063300  \n",
       "2021-12-16  150185800  \n",
       "2021-12-17  195432700  \n",
       "2021-12-20  107499100  \n",
       "\n",
       "[1000 rows x 6 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b77fbe0d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "回看天数: 60\n"
     ]
    }
   ],
   "source": [
    "\n",
    "X_train_set = df_train.iloc[:,4:5].values  # Adj Close欄位\n",
    "#特征标准化 - 正规化 \n",
    "sc = MinMaxScaler() \n",
    "X_train_set = sc.fit_transform(X_train_set)\n",
    " \n",
    "#取出几天前股价来建立成特征和标签数据集\n",
    "def create_dataset(ds, look_back=1):\n",
    "    X_data, Y_data = [],[]\n",
    "    for i in range(len(ds)-look_back):\n",
    "        X_data.append(ds[i:(i+look_back), 0])\n",
    "        Y_data.append(ds[i+look_back, 0])\n",
    "    return np.array(X_data), np.array(Y_data)\n",
    "look_back = 60\n",
    "print(\"回看天数:\", look_back)\n",
    " \n",
    "# 分割成特征数据和标签数据\n",
    "X_train, Y_train = create_dataset(X_train_set, look_back)\n",
    " \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "0c67f3d9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train.shape:  (940, 60, 1)\n",
      "Y_train.shape:  (940,)\n"
     ]
    }
   ],
   "source": [
    "# 转换成(样本数, 时步, 特征)张量  \n",
    "X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))\n",
    "print(\"X_train.shape: \", X_train.shape)\n",
    "print(\"Y_train.shape: \", Y_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "efb71587",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " lstm (LSTM)                 (None, 60, 50)            10400     \n",
      "                                                                 \n",
      " dropout (Dropout)           (None, 60, 50)            0         \n",
      "                                                                 \n",
      " lstm_1 (LSTM)               (None, 60, 50)            20200     \n",
      "                                                                 \n",
      " dropout_1 (Dropout)         (None, 60, 50)            0         \n",
      "                                                                 \n",
      " lstm_2 (LSTM)               (None, 50)                20200     \n",
      "                                                                 \n",
      " dropout_2 (Dropout)         (None, 50)                0         \n",
      "                                                                 \n",
      " dense (Dense)               (None, 1)                 51        \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 50,851\n",
      "Trainable params: 50,851\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "Epoch 1/20\n",
      "30/30 [==============================] - 6s 38ms/step - loss: 0.0268\n",
      "Epoch 2/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0034\n",
      "Epoch 3/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0030\n",
      "Epoch 4/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0031\n",
      "Epoch 5/20\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.0027\n",
      "Epoch 6/20\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.0031\n",
      "Epoch 7/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0027\n",
      "Epoch 8/20\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.0027\n",
      "Epoch 9/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0027\n",
      "Epoch 10/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0027\n",
      "Epoch 11/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0025\n",
      "Epoch 12/20\n",
      "30/30 [==============================] - 1s 39ms/step - loss: 0.0026\n",
      "Epoch 13/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0021\n",
      "Epoch 14/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0023\n",
      "Epoch 15/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0023\n",
      "Epoch 16/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0021\n",
      "Epoch 17/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0020\n",
      "Epoch 18/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0023\n",
      "Epoch 19/20\n",
      "30/30 [==============================] - 1s 38ms/step - loss: 0.0020\n",
      "Epoch 20/20\n",
      "30/30 [==============================] - 1s 37ms/step - loss: 0.0021\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x193a3a44820>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 定义模型 \n",
    "model = Sequential()\n",
    "model.add(LSTM(50, return_sequences=True, \n",
    "               input_shape=(X_train.shape[1], 1)))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(LSTM(50, return_sequences=True))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(LSTM(50))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(1))\n",
    "model.summary()   # 显示模型摘要资讯  \n",
    "#编译模型\n",
    "model.compile(loss=\"mse\", optimizer=\"adam\")\n",
    " \n",
    "#训练模型\n",
    "model.fit(X_train, Y_train, epochs=20, batch_size=32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "674327ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7/7 [==============================] - 1s 13ms/step\n"
     ]
    }
   ],
   "source": [
    "# 使用模型预测股价 - 2017年1~3月预测 4 月份股价\n",
    "X_test_set = df_test.iloc[:,4:5].values\n",
    " \n",
    "# 产生标签数据\n",
    "_, Y_test = create_dataset(X_test_set, look_back)\n",
    " \n",
    "#特征数据和标准化\n",
    "X_test_s = sc.transform(X_test_set)\n",
    "X_test,_ = create_dataset(X_test_s, look_back)\n",
    " \n",
    "# 转换成(样本数, 时步, 特征)张量\n",
    "X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))\n",
    "X_test_pred = model.predict(X_test)\n",
    " \n",
    "#  将预测值转换回股价\n",
    "X_test_pred_price = sc.inverse_transform(X_test_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "9820d137",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  绘出股价图表  \n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False\n",
    "plt.plot(Y_test, color=\"red\", label=\"真实股价\")\n",
    "plt.plot(X_test_pred_price, color=\"blue\", label=\"预测股价\")\n",
    "plt.title(\"苹果股价预测\",fontname=\"SimHei\")\n",
    "plt.xlabel(\"天数\",fontname=\"SimHei\")\n",
    "plt.ylabel(\"价格\",fontname=\"SimHei\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c4d880b7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
